package com.zzxy.spring34.aspect;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;

public class MyAspectJ {
  public void myBefore(JoinPoint joinPoint) {
    System.out.println("before method : " + joinPoint.getSignature().getName());
    System.out.println("my before ...");
  }
  public void myAfter(JoinPoint joinPoint) {

    System.out.println("before method : " + joinPoint.getSignature().getName());
    System.out.println("my after ...");
  }
  @Around("myPointcut()")
  public Object myAround(ProceedingJoinPoint pjp) throws Throwable{
    System.out.println("before around : ");
    Object obj = pjp.proceed();
    System.out.println("after around : ");
    return obj;
  }
  @AfterReturning(value = "myPointcut()",returning = "ret")
  public void myAfterReturning(JoinPoint joinPoint,Object ret) {
    System.out.println("after returning method : " + joinPoint.getSignature().getName() + "-return : " + ret);
  }
  @AfterThrowing(value = "myPointcut()",throwing = "e")
  public void myThrowing(JoinPoint joinPoint,Throwable e) {
    System.out.println("my throwing " + e.getMessage());
  }
}
